#ifndef _Faculty_H_
#define _Faculty_H_

#include<iostream>
#include<cstring>

class Faculty
{
	private:
		std::string Name;
		int EID;
		int Glade;
		int Salary;

	public:
		Faculty(): Name("noName"), EID(0), Glade(0), Salary(0){}
		Faculty(std::string name, int eid, int glade, int salary): Name(name), EID(eid), Glade(glade), Salary(salary){}
		virtual ~Faculty(){}
		void inscreaseGlade(int temp)
		{
			Glade += temp;
			return ;
		}
		void increaseSalary(int temp)
		{
			Salary += temp;
			return ;
		}
		void showFacultyDetai()
		{
			std::cout << "Name = " << Name << std::endl;
			std::cout << "EID = " << EID << std::endl;
			std::cout << "Glade = " << Glade << std::endl;
			std::cout << "Salary = " << Salary << std::endl;

			return ;
		}
};

class Teacher : public Faculty
{
	private:
		std::string School;
		std::string Discipline;
		static int Quot1;

	public:
		Teacher(): School("noSchool"), Discipline("noDiscipline"){}
		Teacher(std::string name, int eid, int glade, int salary, std::string school, std::string discipline): Faculty(name, eid, glade, salary), School(school), Discipline(discipline){}
		void inscreaseGlade(int temp)
		{
			Faculty::inscreaseGlade(temp);
			Faculty::increaseSalary(temp*Quot1);
		}
		void showFacultyDetai()
		{
			Faculty::showFacultyDetai();
			std::cout << "School = " << School << std::endl;
			std::cout << "Discipline = " << Discipline << std::endl;

			return ;
		}
};

class Official : public Faculty
{
	private:
		std::string Department;
		std::string Position;
		static int Quot2;

	public:
		Official(): Department("noDepartment"), Position("noPosition"){}
		Official(std::string name, int eid, int glade, int salary, std::string department, std::string position): Faculty(name, eid, glade, salary), Department(department), Position(position){}
		void inscreaseGlade(int temp)
		{
			Faculty::inscreaseGlade(temp);
			Faculty::increaseSalary(temp*Quot2);
		}
		void showFacultyDetai()
		{
			Faculty::showFacultyDetai();
			std::cout << "Department = " << Department << std::endl;
			std::cout << "Position = " << Position << std::endl;

			return ;
		}

};

class Giant : public Teacher, public Official
{
	public:
		Giant(){}
		Giant(std::string name, int eid, int glade, int salary, std::string school, std::string discipline, std::string department, std::string position): Teacher(name, eid, glade, salary, school, discipline), Official(name, eid, glade, salary, department, position){}

		void inscreaseTeacherGlade(int temp)
		{
			Teacher::inscreaseGlade(temp);
			return ;
		}

		void inscreaseOfficialGlade(int temp)
		{
			Official::inscreaseGlade(temp);
			return ;
		}

		void showFacultyDetai()
		{
			std::cout<< "As Teacher:" << std::endl;
			Teacher::showFacultyDetai();
			std::cout<< "As Official:" << std::endl;
			Official::showFacultyDetai();

			return ;
		}
};

#endif
